{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 数据预处理\n",
    "- 分词，划分训练集测试集，并保存文件\n",
    "- 共有679898个样本"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "import sys\n",
    "import time\n",
    "import jieba"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "ARTICLE_FILE = \"./data/weibo_news/train_text.txt\"\n",
    "SUMMARRY_FILE = \"./data/weibo_news/train_label.txt\"\n",
    "\n",
    "TRAIN_FILE = \"./data/weibo_news/train_art_summ_prep.txt\"\n",
    "VAL_FILE = \"./data/weibo_news/val_art_summ_prep.txt\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "def timer(func):\n",
    "    \"\"\"时间装饰器\"\"\"\n",
    "    def wrapper(*args, **kwargs):\n",
    "        start = time.time()\n",
    "        r = func(*args, **kwargs)\n",
    "        end = time.time()\n",
    "        cost = end - start\n",
    "        print(f\"Cost time: {cost} s\")\n",
    "        return r\n",
    "    return wrapper\n",
    "\n",
    "@timer\n",
    "def load_data(filename):\n",
    "    \"\"\"加载数据文件，对文本进行分词\"\"\"\n",
    "    data_list = []\n",
    "    with open(filename, 'r', encoding= 'utf-8') as f:\n",
    "        for line in f:\n",
    "            # jieba.enable_parallel()\n",
    "            words = jieba.cut(line.strip())\n",
    "            word_list = list(words)\n",
    "            # jieba.disable_parallel()\n",
    "            data_list.append(' '.join(word_list).strip())\n",
    "    return data_list\n",
    "\n",
    "def build_train_val(article_data, summary_data, train_num=600_000):\n",
    "    \"\"\"划分训练和验证数据\"\"\"\n",
    "    train_list = []\n",
    "    val_list = []\n",
    "    n = 0\n",
    "    for text, summ in zip(article_data, summary_data):\n",
    "        n += 1\n",
    "        if n <= train_num:\n",
    "            train_list.append(text)\n",
    "            train_list.append(summ)\n",
    "        else:\n",
    "            val_list.append(text)\n",
    "            val_list.append(summ)\n",
    "    return train_list, val_list\n",
    "\n",
    "def save_file(filename, li):\n",
    "    \"\"\"预处理后的数据保存到文件\"\"\"\n",
    "    with open(filename, 'w+', encoding='utf-8') as f:\n",
    "        for item in li:\n",
    "            f.write(item + '\\n')\n",
    "    print(f\"Save {filename} ok.\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Building prefix dict from the default dictionary ...\n",
      "Loading model from cache /tmp/jieba.cache\n",
      "Loading model cost 1.055 seconds.\n",
      "Prefix dict has been built succesfully.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Cost time: 582.3778989315033 s\n"
     ]
    }
   ],
   "source": [
    "article_data = load_data(ARTICLE_FILE)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Cost time: 105.96853184700012 s\n"
     ]
    }
   ],
   "source": [
    "summary_data = load_data(SUMMARRY_FILE)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['徐州 18 岁 农家 女孩 宋爽 ， 今年 考入 清华大学 。 除了 自己 一路 闯关 ， 年 年 拿 奖 ， 还 帮 妹妹 、 弟弟 制定 学习 计划 ， 姐弟 仨 齐头并进 ， 妹妹 也 考上 区里 最好 的 中学 。 这个 家里 的 收入 ， 全靠 父亲 务农 和 打零工 ， 但 宋爽 懂事 得 让 人 心疼 ， 曾 需要 200 元 奥数 竞赛 的 教材费 ， 她 羞于 开口 ， 愣 是 急 哭 了 ...   戳 腾讯 公益 帮帮 她们 ！ # 助学 圆梦 #   江苏 新闻 的 秒 拍 视频',\n",
       " '盖 被子 ， 摇 摇篮 ， 汪星 人 简直 要 把 萌娃 宠 上天 ～ 细致 周到 有 耐心 ， 脾气 还好 ， 汪星 人 不愧 是 一届 带娃 好手 [ 笑 而 不语 ] 偶买 噶 视频 的 秒 拍 视频   \\u200b \\u200b \\u200b',\n",
       " '人们 通常 被 社会 赋予 的 \" 成功 \" 所 定义 ， “ 做 什么 工作 ” “ 赚 多少 钱 ” 都 用来 评判 一个 人 的 全部 价值 ， 很多 人 出现 身份 焦虑 。 身份 焦虑 不仅 影响 幸福感 ， 还会 导致 精神压力 ， 甚至 自杀 。 如果 你 也 有 身份 焦虑 ， 这个 短片 或许 会 有 帮助 。 秒 拍 视频   \\u200b \\u200b \\u200b',\n",
       " '网友 @ 星蓝 seiran   教 大家 自制 的 捕捉 器 教程 ， 简单 方便 ， 里面 的 洗洁精 换成 肥皂水 或 洗衣粉 水 都 可以 （ 用于 溶解 蟑螂 腹部 油脂 防止 爬 出 ） ， 白糖 稍微 多放点 。 怕 蟑螂 的 童鞋 ， 可以 换成 不 透明 的 瓶子 。 转需 ~   \\u200b \\u200b \\u200b',\n",
       " '车辆 众多 的 路口 ， 哪些地方 能 掉头 ？ 没有 调头 指示灯 和 调头 标志 的 路段 ， 你 还 知道 怎么 调头 吗 ？ @ 汽车 洋葱 圈   戳 视频 了解 ↓ ↓ 转给 新 司机 ！ 汽车 洋葱 圈 的 秒 拍 视频   \\u200b \\u200b \\u200b',\n",
       " '平板 支撑 （ plank ） ， 时下 最热 “ 甩肉 ” 秘笈 。 可以 有效 的 锻炼 腹横肌 ， 被 公认 为 训练 腹肌 最 有效 的 方法 之一 ， 每天 坚持 做 可以 让 平坦 的 小腹 重见天日 。 每个 坚持 30 秒 ， 休息 30 秒 。 你 若 不 坚持 ， 不如 别 开始 ， 你 想要 的 只能 自己 给 自己 ！   \\u200b \\u200b \\u200b \\u200b',\n",
       " '炎热 的 夏季 ， 每天 都 要 将 换下 的 衣物 清洗 干净 ， 为啥 有些 人 的 衣服 穿着 穿着 就 掉色 ？ 衣服 也 不 柔软 了 呢 ？ 不要 怪 衣服 的 质量 ， 晒衣 也 是 有 学问 的 哦 。 戳 图 ↓ ↓ 告诉 你 晒衣服 的 正确 方式 ， 转发 收藏 ！   \\u200b \\u200b \\u200b \\u200b',\n",
       " '最近 是不是 热热 热热 热热 热热 热热 热热 热炸 了 ？ ！ 如何 在 三伏天 防暑降温 ， 安然 度夏 ？ 夏日 消暑 美食 指南 ， 动手 自制 消暑 美食 ， 清 清凉凉 地 度过 这个 炎夏 ！ [ 馋嘴 ]   \\u200b \\u200b \\u200b \\u200b',\n",
       " '小张 在 南京 一 整形 诊所 接受 鼻部 整形 ， 主刀 的 韩国 医生 朴光哲 ， 号称 “ 世界 鼻部 整形 泰斗 ” 、 “ 韩国 美鼻 教父 ” 。 没多久 ， 小张 的 鼻子 歪 了 ， 假体 快滑出 鼻尖 。 记者 得知 ， 朴光哲 未注册 就 在 中国 进行 整容手术 ， 属 非法 行医 。 整容 有 风险 ， 提醒 爱美 的 TA ！ 江苏 新闻 的 秒 拍 视频',\n",
       " '近日 ， 因 天气 太热 ， 安徽 一 老太 在 买 肉 路上 突然 眼前 一黑 ， 摔倒 在 地 。 她 怕 别人 不 扶 她 ， 连忙 说 \" 快 扶 我 起来 ， 我 不 讹 你 ， 地上 太热 我 要 熟 了 ！ \" 这一喊 周围 人 都 笑 了 ， 老人 随后 被 扶 到 路边 休息 。 ( 颍州 晚报 ) [ 话筒 ] 最近 老人 尽量避免 出门 !   \\u200b \\u200b \\u200b \\u200b']"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "article_data[:10]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "TRAIN_SPLIT = 600_000\n",
    "train_list, val_list = build_train_val(article_data, summary_data, train_num=TRAIN_SPLIT)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Save ./data/weibo_news/train_art_summ_prep.txt ok.\n",
      "Save ./data/weibo_news/val_art_summ_prep.txt ok.\n"
     ]
    }
   ],
   "source": [
    "save_file(TRAIN_FILE, train_list)\n",
    "save_file(VAL_FILE, val_list)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
